package java学习.第06章_面向对象编程_基础;

/**
 * ClassName: D2_方法之可变形参
 * Package: java学习.第06章_面向对象编程_基础
 * Description:
 *
 * @Author 张蛟龙
 * @Create 2023/3/4 21:32
 * @Version 1.0
 */
public class D2_方法之可变形参 {
    /**
     * 可变形参  他的优先级最低
     *
     * add(int ... a)  相当于  add(int[] a)
     * 但是 int[] a  不能 使用  add(1,2,3,4) 来调用
     * 而 add(int ... a)  可以
     *
     * 可变参数：方法参数部分指定类型的参数个数是可变多个：0个，1个或多个
     * 可变个数形参的方法与同名的方法之间，彼此构成重载
     * 可变参数方法的使用与方法参数部分使用数组是一致的，
     *      二者不能同时声明，否则报错。
     * 方法的参数部分有可变形参，需要放在形参声明的最后
     * 在一个方法的形参中，最多只能声明一个可变个数的形参
     *
     * public int add(int b,int ... a)
     *  public int add(int ... a)
     *  以上可以重载
     *  如果 使用 add(1,2,3) 就会疑惑 调用的是哪个
     *  所以 用 add(1,new int[]{1,2,3}) 就可以使用 add(int b,int ... a)
     * 但是add(int ... a) 只能add(new int[]{1,2,3}) 才能调用
     *
     */
    public static void main(String[] args) {
        D2_方法之可变形参 d = new D2_方法之可变形参();
        d.add(1,5);
        d.add(new int[]{1,2,3});
        d.add(1,new int[]{1,2,3});
//        d.add(1,2,3);//
    }


    public int add(int ... a){// int ... a 相当于  int[] a
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];
        }
        return sum;
    }
    public int add(int b,int ... a){// int ... a 相当于  int[] a
        int sum = b;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];
        }
        return sum;
    }
//    public int add(int[] a) //
    public int add(int a,int b){
        return a+b;
    }

}
